package com.liangzhong.model.chat
{
	import com.common.stdlib.StringUtil;
	import com.liangzhong.events.ChatEvent;
	import com.liangzhong.model.AppData;
	import com.liangzhong.model.chat.vo.ChatVo;
	import com.liangzhong.model.type.GoodsType;
	
	import flash.events.EventDispatcher;
	import flash.utils.ByteArray;

	public class ChatDataManger extends EventDispatcher
	{
		/**
		 *全部聊天信息  
		 */
		public var allChat:Array = [];
		/**
		 *世界聊天信息 
		 */
		public var worldChat:Array = [];
		/**
		 *联盟聊天 
		 */
		public var allianceChat:Array = [];
		/**
		 *国家聊天 
		 */
		public var countryChat:Array = [];
		/**
		 *私聊 
		 */
		public var privateChat:Array = [];
		
		/**
		 *普通玩家 
		 */
		public static const ORDINARYPLAYER:int = 0;
		/**
		 *GM号 
		 */
		public static const GMPLAYER:int = 1;
		/**
		 *测试玩家 
		 */
		public static const TESTPLAYER:int = 2;
		public function ChatDataManger()
		{
		}
		/**
		 *获得聊天信息 解析 
		 * 
		 */
		public function getChatMessage(buffer:ByteArray):void
		{
			var nreturn:int = buffer.readInt();
			var chatVo:ChatVo = new ChatVo();
			var type:int;
			var str:String;
			var len:int ;
//			trace("聊天返回码：：" + nreturn);
			switch(nreturn)
			{
				case 0:
				case 1:
					chatVo.ntype = buffer.readByte();
					chatVo.vip = buffer.readInt();
					len = buffer.readShort();
					chatVo.name = buffer.readUTFBytes(len);
					chatVo.country = buffer.readShort();
					chatVo.id = buffer.readInt();
					chatVo.playertype  = buffer.readByte();
					len = buffer.readShort();
					chatVo.pFormat = buffer.readUTFBytes(len);
					if(chatVo.playertype == 0)
						chatVo.pFormat = StringUtil.filterWord(chatVo.pFormat);
//					var i:String;
//					for each(i in arr)
//					{
//						chatVo.pFormat = chatVo.pFormat.replace(new RegExp(i,"g"),"**");
//					}
					assemble(chatVo);
					
					//trace("世界聊天::" + chatVo.ntype);
					break;
				case 152://请不要发空消息
					chatVo.ntype = ChatDataConstants.ALL_CHAT;
					chatVo.pFormat = "<font color = '#FF0000'>【系统】请不要发空消息</font>"
					checkType(ChatDataConstants.ALL_CHAT,chatVo.pFormat)
					break;
				case 153://您所发送的消息过长
					chatVo.ntype = ChatDataConstants.ALL_CHAT;
					chatVo.pFormat = "<font color = '#FF0000'>【系统】您所发送的消息过长</font>"
					checkType(ChatDataConstants.ALL_CHAT,chatVo.pFormat);
					break;
				case 154://对方不在线
					chatVo.ntype = ChatDataConstants.ALL_CHAT;
					chatVo.pFormat = "<font color = '#FF0000'>【系统】对方不在线</font>"
					checkType(ChatDataConstants.ALL_CHAT,chatVo.pFormat)
					break;
				case 155://您没有选择频道
					chatVo.ntype = ChatDataConstants.ALL_CHAT;
					chatVo.pFormat = "<font color = '#FF0000'>【系统】您没有选择频道</font>"
					checkType(ChatDataConstants.ALL_CHAT,chatVo.pFormat)
					break;
				case 156://您发消息过于频繁
					chatVo.ntype = ChatDataConstants.ALL_CHAT;
					chatVo.pFormat = "<font color = '#FF0000'>【系统】您发信息的速度太快，请稍后重新发送</font>"
					checkType(ChatDataConstants.ALL_CHAT,chatVo.pFormat)
					break;
			}
			
			this.dispatchEvent(new ChatEvent(ChatEvent.GET_MESSAGE,{vo:chatVo}));
		}
		
		/**
		 *测试人员 
		 * @param chatVo
		 * 
		 */
		private function testAssemble(chatVo:ChatVo):void
		{
			chatVo.pFormat = "<font color = '#FF0000'>【测试员】"+chatVo.pFormat+"</font>"
			checkType(chatVo.ntype,chatVo.pFormat)
		}
		
		/**
		 * GM说话组装数据（聊天内容 
		 * @param chatVo
		 * 
		 */
		private function gmassemble(chatVo:ChatVo):void
		{
			chatVo.pFormat = "<font color = '#FF0000'>【GM】"+chatVo.pFormat+"</font>"
			checkType(chatVo.ntype,chatVo.pFormat)
		}
		/**
		 *普通玩家 
		 * @param chatVo
		 * 
		 */
		private function ordinaryplayer(chatVo:ChatVo):void
		{
			var str:String = "<font color = '#FFFFFF'>";
			switch(chatVo.ntype)
			{
				case ChatDataConstants.ALL_CHAT:
				case ChatDataConstants.WORLD_CHAT:
					str += "<font color = '#FFFF00'>【世界】</font>"
					break;
				case ChatDataConstants.ALLIANCE_CHAT:
					str += "<font color = '#00FF00'>【联盟】</font>"
					break;
				case ChatDataConstants.COUNTRY_CHAT:
					str += "<font color = '#0099FF'>【国家】</font>"
					break;
				case ChatDataConstants.PRIVATE_CHAT:
					str += "<font color = '#FF33CC'>【私聊】</font>"
					break;
			}
			if(chatVo.vip > 0)
			{
				str += ("<b><font color = '#FFFF00'>Vip" + chatVo.vip + "</font></b>");
			}
			str += "<a href='event:"+chatVo.id+"_"+chatVo.name+"'><u><font color = '#00FF00'>"+chatVo.name +"</font></u></a>";//#FFFFCC
			str += country(chatVo.country);
			str += chatVo.pFormat;
			chatVo.pFormat = str + "</font>";
			checkType(chatVo.ntype,chatVo.pFormat);
		}
		/**
		 *组装数据(聊天内容) 
		 * 
		 */
		public function assemble(chatVo:ChatVo):void
		{
			switch(chatVo.playertype)
			{
				case ORDINARYPLAYER:
					ordinaryplayer(chatVo);
					break;
				case GMPLAYER:
					gmassemble(chatVo)
					break;
				case TESTPLAYER:
					testAssemble(chatVo);
					break;
			}
		}
		/**
		 *国家转换 
		 * @param $id
		 * @return 
		 * 
		 */
		private  function country($id:int):String
		{
			switch($id)
			{
				case 1:
					return "·英：";
					break;
				case 2:
					return "·西：";
					break;
				case 3:
					return "·法：";
					break;
				case 4:
					return "·德：";
					break;
				case 5:
					return "·意：";
					break;
				case 6:
					return "·中：";
					break;
			}
			return "：";
		}
		
		/**
		 *检测类型 
		 * @param $type
		 * 
		 */
		public function checkType($type:int,$str:String):void
		{
			allChat.push($str);
			checkLength(allChat);
			switch($type)
			{
//				case ChatDataConstants.ALL_CHAT:
				case ChatDataConstants.WORLD_CHAT:
					worldChat.push($str);
					checkLength(worldChat);
					break;
				case ChatDataConstants.ALLIANCE_CHAT:
					allianceChat.push($str);
					checkLength(allianceChat);
					break;
				case ChatDataConstants.COUNTRY_CHAT:
					countryChat.push($str);
					checkLength(countryChat);
					break;
				case ChatDataConstants.PRIVATE_CHAT:
					privateChat.push($str);
					checkLength(privateChat);
					break;
			}
		}
		/**
		 *检测长度
		 * 长度不能大于50，大于50删除最前一个元素 
		 * @param $arr
		 * 
		 */
		private function checkLength($arr:Array):void
		{
			if($arr.length > 50)
				$arr.shift();
		}
		/**
		 *获得公告消息 
		 * 
		 */
		public function getNoticeMessage($str:String):void
		{
			var chatVo:ChatVo = new ChatVo();
			chatVo.ntype = ChatDataConstants.ALL_CHAT;
			chatVo.pFormat = "<font color = '#FFFF00'>【公告】"+$str+"</font>"
			checkType(chatVo.ntype,chatVo.pFormat);
			this.dispatchEvent(new ChatEvent(ChatEvent.GET_MESSAGE,{vo:chatVo}));
		}
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		/**
		 *处理公告信息 
		 * 
		 */
		public function handerNotic(buffer:ByteArray):Array
		{
			var len:int = buffer.readShort();
			var name:String = buffer.readUTFBytes(len);	//名称 
			var noticeType:int = buffer.readShort();	//公告类型
			var propId:int = buffer.readInt();			//道具ID;
			var propType:int = buffer.readByte();		//道具类型
			var count:int = buffer.readShort();			//播放次数
			var time:int = buffer.readInt();			//播放间隔
			len = buffer.readShort();
			var pFormat:String = buffer.readUTFBytes(len);//系统公告
			var str:String;								//公告显示内容 
//			var startFont:String = "<font color = '#FF00FF'>";
//			var endFont:String = "<\font>";
			var nameFone:String = "<font color = '#FF00FF'>"+name+"</font>";
			switch(noticeType)
			{
				case 1:
					str = "冲级达人" + nameFone+"已经冲到50级！成为了第一阶梯的球队！"
					break;
				case 2:
					str = nameFone+ "通过不断训练已经达到红色级别了，离成功仅一步之遥。";
					break;
				case 3:
					str = "地球人已经没法阻止"+nameFone+"了！他已经成为了黑色球员！！"
					break;
				case 4:
					str = nameFone + noticeGetGoods(propId,propType);;
					break;
				case 5:
					str = "这简直不可能，"+nameFone+"成功通过了传奇联赛。";
					break;
				case 6:
					str = "凭着超强的实力"+nameFone +"获得了冠军杯，开启神秘碉堡的传奇挑战！";
					break;
				case 7:
					str = nameFone+ "通过不懈努力，登上S级别！哎呀吗，高处太冷了！";
					break;
				case 8:
					str = "<font color = '#FF0000'>" +pFormat +"</font>";
					break;
				case 9:
					str =  nameFone+ "终于通过了甲级联赛，正式开启冠军联赛！我伙呆！";
					break;
				case 10://10.	活跃度100
					str =  nameFone+ "达到了惊人的活跃度100，大家伙呆！";
					break;
				case 11://11.	个人捐献1000万
					str =  nameFone+ "捐献给国库10000000！大大的推进了国家任务的发布进程，深受英国国民的爱戴！~"
					break;
				case 12://12.	中国发布国家任务
					str =  "勤劳善良的中国人民的国王"+nameFone+"发布了国家任务！他们站起来啦~啦~啦~"
					break;
				case 13://13.	德国发布国家任务
					str =  "严谨顽强的德意志国王"+nameFone+"发布了国家任务！下个5年计划开启！"
					break;
				case 14://14.	法国发布国家任务
					str =  "浪漫时尚的法国人民的国王"+nameFone+"发布了国家任务！欢迎来到大革命时代！"
					break;
				case 15://15.	英国发布国家任务
					str =  "勇敢的英格兰人民的国王"+nameFone+"发布了国家任务！日不落帝国重新开张！"
					break;
				case 16://16.	意大利发布国家任务
					str =  "智慧朴实的意大利人民的国王"+nameFone+"发布了国家任务！文艺正式复兴！"
					break;
				case 17://17.	西班牙发布国家任务
					str =  "激情四射的西班牙人民的国王"+nameFone+"发布了国家任务！斗牛曲~开播！"
					break;
				case 18://18.	vip1
					str =  nameFone+ "成为VIP1，超级之路正式开启！"
					break;
				case 19:
					str =  nameFone+ "成为VIP2，亲，你们害怕了吗~"
					break;
				case 20:
					str =  nameFone+ "成为VIP3，这是超超超级赛亚人的节奏啊！"
					break;
				case 21:
					str =  nameFone+ "成为VIP4，成功的号角已经吹响！"
					break;
				case 22:
					str =  nameFone+ "成为VIP5，什么都阻止不了他前进的步伐了！"
					break;
				case 23:
					str =  nameFone+ "成为VIP6，小伙伴们都激动的哭了！"
					break;
				case 24:
					str =  nameFone+ "成为VIP7，整个国家为之震惊！"
					break;
				case 25:
					str =  nameFone+ "成为VIP8，这是百年俱乐部的节奏哇！"
					break;
				case 26:
					str =  nameFone+ "成为VIP9，新的豪门已经诞生！"
					break;
				case 27:
					str =  nameFone+ "成为VIP10，真正的王朝就要来临！"
					break;
				case 28:
					str =  nameFone+ "成为VIP11，地球人已经完全不放在眼里了！"
					break;
				case 29://vip 12
					str =  nameFone+ "成为VIP12，称霸全宇宙！"
					break;
				case 30:
					str =  "一路过关斩将，"+ nameFone + "顺利进入甲级联赛！"
					break;
				case 31:
					str =  nameFone +"积极响应了党的号召，开开心心的拿到了首冲奖励，大家掌声在哪里？！"
					break;
				case 32:
					str =  nameFone+"捐献给国库10000000！大大的推进了国家任务的发布进程，深受西班牙国民的爱戴！~";
					break;
				case 33:
					str =  nameFone+"捐献给国库10000000！大大的推进了国家任务的发布进程，深受法国国民的爱戴！~";
					break;
				case 34:
					str =  nameFone+"捐献给国库10000000！大大的推进了国家任务的发布进程，深受德国国民的爱戴！~";
					break;
				case 35:
					str =  nameFone+"捐献给国库10000000！大大的推进了国家任务的发布进程，深受意大利国民的爱戴！~";
					break;
				case 36:
					str =  nameFone+"捐献给国库10000000！大大的推进了国家任务的发布进程，深受中国国民的爱戴！~";
					break;
				case 37:
				case 43:
					str =  nameFone+"捐赠了100000欧元到国库，英国人民表示还行，希望再多来点。。。";
					break;
				case 38:
				case 44:
					str =  nameFone+"捐赠了100000欧元到国库，西班牙人民表示还行，希望再多来点。。。";
					break;
				case 39:
				case 45:
					str =  nameFone+"捐赠了100000欧元到国库，法国人民表示还行，希望再多来点。。。";
					break;
				case 40:
				case 46:
					str =  nameFone+"捐赠了100000欧元到国库，德国人民表示还行，希望再多来点。。。";
					break;
				case 41:
				case 47:
					str =  nameFone+"捐赠了100000欧元到国库，意大利人民表示还行，希望再多来点。。。";
					break;
				case 42:
				case 48:
					str =  nameFone+"捐赠了100000欧元到国库，中国人民表示还行，希望再多来点。。。";
					break;
				case 49:// 玩家变成了金色球员
					str =nameFone +  "历经百千磨难，终于将自身强化为金色品质，世界为之颤抖~~~"
					break;
				case 50://玩家合成了金色强化卡
					str = nameFone +"全部点亮十二宫，雅典娜的歌声响彻宇宙，金色强化正式开启！"
					break;
//				case 43:
//					str =  nameFone+"捐赠了100点券到国库，英国人民表示还行，希望再多来点。。。";
//					break;
//				case 44:
//					str =  nameFone+"捐赠了100点券到国库，西班牙人民表示还行，希望再多来点。。。";
//					break;
//				case 45:
//					str =  nameFone+"捐赠了100点券到国库，法国人民表示还行，希望再多来点。。。";
//					break;
//				case 46:
//					str =  nameFone+"捐赠了100点券到国库，德国人民表示还行，希望再多来点。。。";
//					break;
//				case 47:
//					str =  nameFone+"捐赠了100点券到国库，意大利人民表示还行，希望再多来点。。。";
//					break;
//				case 48:
//					str =  nameFone+"捐赠了100点券到国库，中国人民表示还行，希望再多来点。。。";
//					break;
				default:
					str = "";
					break;
			}
			getNoticeMessage(str);
			var arr:Array = [];
			for(var i:int = 0;i < count;i++)
			{
				arr.push(str);
			}
			return arr;
		}
		/**
		 *物品类型 
		 * @param $type
		 * 
		 */
		private function noticeGetGoods($id:int,$type:int):String
		{
			
			
			switch($type)
			{
				case GoodsType.PLAYERCARD:
					switch(AppData.getInstance().goodsManager.getStarById($id).color)
					{
						case 6:
							return "通过球员探索功能获取了<font color = '#FF0000'>" + AppData.getInstance().goodsManager.getStarById($id).name + "</font>";
							break;
						case 7:
							return "<font color = '#FF0000'>通过球员探索功能获取了黑色球员" + "<font color = '#000000'>【" +
							AppData.getInstance().goodsManager.getStarById($id).name+ "】</font></font>";;
							break;
					}
					break;
				case GoodsType.FOOTWEAR:
					return "经过千锤百炼！终于打造出了！<font color = '#FF00FF'>"  + AppData.getInstance().goodsManager.getFootWearById($id).name+ "</font>";
					break;
				case GoodsType.ATTRIBUTE:
					return "的运气爆发了！！合成了一张<font color = '#FF00FF'>" + AppData.getInstance().goodsManager.getAttributeById($id).name+ "</font>";;
					break;
				case GoodsType.TEAMCLOTH:
					return "玩家千锤百炼终于合出了<font color = '#FF00FF'>"+ AppData.getInstance().goodsManager.getTrikotById($id).name+"</font>，整个世界都为之颤抖！"
					break;
				case GoodsType.MATERIAL:
					switch(AppData.getInstance().goodsManager.getMaterialById($id).color)
					{
						case 6:
							return "的获得了一张红色强化卡！梦想不在遥远！"
							break;
						case 7:
							return 	"获得了一张黑色强化卡！黑色球员就要诞生了吗！？？？？";
							break;
						case 8:
							return "终于成功合成了金色强化卡，凡人们，颤抖吧！";
							break;
					}
					break;
				case GoodsType.OTHER:
					
					break;
				case GoodsType.DRUG:
					
					break;
					
			}
			return  "";
		}
	}
}